package com.sniper.mybatis.dao;

import java.util.List;
import java.util.Map;

/**
 * 主控操作和关联操作的先后顺序是“先保存one，再保存many；先删除many，再删除one；先update主控方，再update被动方”
 *
 * @param <T>
 * @author sniper
 */
public interface BaseDao<T> {

    /**
     * 插入数据
     *
     * @param t
     * @return
     */

    int insert(String sqlId, T t);

    int insert(String sqlId, Map<String, Object> params);

    /**
     * 更新数据
     *
     * @param t
     * @return
     */
    int update(String sqlId, T t);

    int update(String sqlId, Map<String, Object> params);

    /**
     * 删除数据
     *
     * @param sqlId
     * @param id
     * @return
     */

    int delete(String sqlId, String id);

    int delete(String sqlId, int id);

    int delete(String sqlId, Map<String, Object> params);

    /**
     * 获取数据
     *
     * @param id
     * @return
     */

    T get(String sqlId, String id);


    T get(String sqlId, int id);

    /**
     * 查询数据
     *
     * @param sqlId
     * @param params
     * @return
     */
    List<T> query(String sqlId, Map<String, Object> params);

    List<Map<String, Object>> queryMap(String sqlId, Map<String, Object> params);

    /**
     * 执行原始sql。比如创建表
     *
     * @param sqlId
     * @param params
     */
    void executeSql(String sqlId, Map<String, Object> params);

    /**
     * 批量新增
     *
     * @param sqlId
     * @param list
     * @return
     */

    int batchInsert(String sqlId, List<T> list);

    int batchInsertMap(String sqlId, List<Map<String, Object>> list);

    /**
     * 批量修改
     *
     * @param sqlId
     * @param list
     * @return
     */
    int batchUpdate(String sqlId, List<T> list);

    int batchUpdateMap(String sqlId, List<Map<String, Object>> list);

    /**
     * @param sqlId
     * @param ids
     * @return
     */

    int batchDelete(String sqlId, String[] ids);

    int batchDelete(String sqlId, Integer[] ids);

    /**
     * 获取一些单一结果的 比如技术数，
     *
     * @param sqlId
     * @param params
     * @return
     */
    Object find(String sqlId, Map<String, Object> params);

}
